import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

/**
 * Created whit IntelliJ IDEA.
 * Description：
 * User：ZHONGCHEN
 * Date:2022-03-03
 * Time:20:57
 */
public class TestDemo {
    //一个数的二进制表达形式里,连续为1的个数是多少
    public static void main1(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int ans = 0;
            int oneNum = 0;
            int num = scanner.nextInt();
            for (int i = 0; i < 32; i++) {
                if (((num >> i) & 1) == 1) {
                    oneNum++;
                } else {
                    ans = Math.max(ans, oneNum);
                    oneNum = 0;
                }
            }
            System.out.println(ans);
        }
    }

    //最近公共祖先
    //将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号，
    // 根结点编号为1。现给定a，b为两个结点。设计一个算法，
    // 返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。

    //思路：满二叉树的子节点与父节点之间的关系为root = child / 2
    //利用这个关系，如果a ！= b，就让其中的较大数除以2， 如此循环知道a == b，
    //即是原来两个数的最近公共祖先
    public static int getLCA(int a, int b) {
        while (a != b) {
            if (a > b) {
                a /= 2;
            } else if (a < b) {
                b /= 2;
            }
        }
        return a;
    }

    //查找组成一个偶数最接近的两个素数
    public static void main2(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int num = scanner.nextInt();
            for (int i = num / 2; i < num; i++) {
                boolean flag = false;
                if (ifPrimeNumber(i)) {
                    flag = ifPrimeNumber(num - i);
                }
                if (flag) {
                    System.out.println(num - i);
                    System.out.println(i);
                    break;
                }
            }
        }
    }

    //判断是否为素数
    public static boolean ifPrimeNumber(int num) {
        for (int i = num - 1; i >= Math.sqrt(num); i--) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }

    //牛客 二进制插入
    /**给定两个32位整数n和m，同时给定i和j，
     * 将m的二进制数位插入到n的二进制的第j到第i位,
     * 保证n的第j到第i位均为零，且m的二进制位数小于等于i-j+1，
     * 其中二进制的位数从0开始由低到高。*/
    public int binInsert(int n, int m, int j, int i) {
        //将m左移动j位后 跟n进行或
        m <<= j;
        return n|m;
    }
}